下面列出与R语言相关的主要社区和资源。
·R官方网站:http://www.r-project.org/ 31 ·R开发者论坛:http://r.789695.n4.nabble.com/ ·CRAN:http://cran.rstudio.com/ ·RForge:https://r-forge.r-project.org/ ·R新闻和博客:http://www.r-bloggers.com/ ·统计之都:http://cos.name/
下面列出与R语言相关的主要社区和资源。
·R官方网站:http://www.r-project.org/ 31 ·R开发者论坛:http://r.789695.n4.nabble.com/ ·CRAN:http://cran.rstudio.com/ ·RForge:https://r-forge.r-project.org/ ·R新闻和博客:http://www.r-bloggers.com/ ·统计之都:http://cos.name/
R语言让我跳出了原有的思维定式。使用R语言,我们应该像 统计学家那样思考问题,而不是拘泥于程序员的思维模式。统计 学家的思维模式,是先考虑为什么,再考虑做什么。而程序员的 思维模式,是直接考虑怎么做,等有了结果再考虑为什么。
R语言是直接面向数据的语言。
fortunes记录R语言的大智慧
fortunes库是一个R语言的语录集,截至2013年12月14日,一 共总结了360条R-help的留言。这些都是R语言智慧的精华,让R语 言的后辈使用者,可以更了解R语言的本身,了解R的精神。
1.3.2 fortunes安装 本节使用的系统环境是:
·Linux:Ubuntu 12.04.2LTS 64bit ·R:3.0.1x86_64-pc-linux-gnu 注 fortunes同时支持Windows 7环境和Linux环境。
Fortunes的安装过程如下。
~ R # 启动R 程序 > install.packages("fortunes") # 安装fortunes 包 > library(fortunes) # 加载fortunes 包 > ?fortunes # 查看帮助 52 1.3.3 fortunes包的使用 fortunes包的使用非常简单,只有一个函数fortune()。
> fortune() # 随机查看一条语录 Barry Rowlingson: Your grid above has 8*6 = 42 points. (That was a subtle Hitchhikers Guide To The Galaxy reference there, honest, and not a stupid dumb multiplication mistake on my part after working four 18-hour days on the trot...) Peter Dalgaard: [...] Don't panic, just throw yourself at the ground and miss. -- Barry Rowlingson and Peter Dalgaard R-help (March 2004) > fortune(108) # 指定查看一条语录 Actually, I see it as part of my job to inflict R on people who are perfectly happy to have never heard of it. Happiness doesn't equal proficient and efficient. In some cases the proficiency of a person serves a greater good than their momentary happiness. -- Patrick Burns R-help (April 2005) 完整的语录下载地址是http://cran.r- project.org/web/packages/fortunes/vignettes/fortunes.pdf。静下心来 阅读这些智慧精华就能更了解R语言本身。想用好一门语言,就需 要更深入地了解它。
formatR代码自动化排版
formatR包是一个实用的包,提供了R代码格式化功能,可以 自动设置空格、缩进、换行等代码格式,让代码看起来更友好。
formatR包中的API中主要有下面5个函数。
·tidy.source:对代码进行格式化 ·tidy.eval:输出格式化后的R代码和运行结果 ·usage:格式化函数定义,并按指定宽度输出 ·tidy.gui:一个GUI工具,支持编辑并格式化R代码 ·tidy.dir:对某个目录下,所有R脚本进行格式化
formatR安装 本节使用的系统环境是:
·Win764bit ·R:3.0.1x86_64-w64-mingw32/x64b4bit 注 formatR同时支持Windows 7环境和Linux环境。
formatR的安装过程如下:
~ R # 启动R 程序 > install.packages("formatR") # 安装formatR 包 library(formatR) # formatR 加载
formatR的使用 1.字符串格式化 tidy.source()函数,以字符串作为输入参数,对代码格式化。
> tidy.source(text = c("{if(TRUE)1 else 2; if(FALSE){1+1", "## comments", "} else 2}")) { if (TRUE) 1 else 2 if (FALSE) { 1 + 1 ## comments } else 2 } 通过执行tidy.source()函数,把代码进行了重新格式化,让我 们一眼就可以看得懂。
2.文件格式化 messy.R是一个不太规范的R程序文件。我们读入这个文件, 然后通过tidy.source()函数,以文件对象作为输入参数,进行代码 格式化。
> messy = system.file("format", "messy.R", package ="formatR") > messy [1] "C:/Program Files/R/R-3.0.1/library/formatR/format/messy.R" 58 messy.R的原始代码输出:
> src = readLines(messy) > cat(src,sep="\n") # a single line of comments is preserved 1+1 if(TRUE){ x=1 # inline comments }else{ x=2;print('Oh no... ask the right bracket to go away!')} 1*3 # one space before this comment will become two! 2+2+2 # 'short comments' lm(y~x1+x2, data=data.frame(y=rnorm(100),x1=rnorm(100),x2=rnorm(100))) ### only'single quotes' are allowed in comments 1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1 ## comments after a long line 'a character string with \t in it' ## here is a long long long long long long long long long long long long long long long long long long long long comment 格式化后的代码输出:
> tidy.source(messy) # a single line of comments is preserved 1 + 1 if (TRUE) { x = 1 # inline comments } else { x = 2 print("Oh no... ask the right bracket to go away!") 59 } 1 * 3 # one space before this comment will become two! 2 + 2 + 2 # 'short comments' lm(y ~ x1 + x2, data = data.frame(y = rnorm(100), x1 = rnorm(100), x2 =rnorm(100))) ### only 'single quotes' are allowed in comments 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 ## comments after a long line "a character string with \t in it" ## here is a long long long long long long long long long long long long longlong long long ##long long long long comment 可以看出,格式化后的输出,经过了空格、缩进、换行、注 释等处理,代码可读性就增强了。
3.格式化并输出R脚本文件 新建R脚本文件demo.r。
~ vi demo.r a<-1+1;a;matrix(rnorm(10),5); if(a>2) { b=c('11',832);"#a>2";} else print('a is invalid!!') 格式化demo.r。
> x = "demo.r" > tidy.source(x) a <- 1 + 1 a matrix(rnorm(10), 5) if (a > 2) { b = c("11", 832) 60 "#a>2" } else print("a is invalid!!") 输出格式化结果到文件demo2.r,如图1-3所示。
> f="demo2.r" > tidy.source(x, keep.blank.line = TRUE, file = f) > file.show(f) 图1-3 输出格式化结果到文件 4.输出格式化代码和运行结果 使用tidy.eval()函数,以字符串形式,执行R脚本:
> tidy.eval(text = c("a<-1+1;a", "matrix(rnorm(10),5)")) a <- 1 + 1 a 61 ## [1] 2 matrix(rnorm(10), 5) ## [,1] [,2] ## [1,] 0.65050729 0.1725221 ## [2,] 0.05174598 0.3434398 ## [3,] -0.91056310 0.1138733 ## [4,] 0.18131010 -0.7286614 ## [5,] 0.40811952 1.8288346 这样直接在当前的运行环境中,就输出了代码和运行结果。
5.格式化函数定义 通过usage()函数可以只打印出函数定义,跳过函数细节。以 var()函数为例,输入var,默认会打印出一个函数细节。
> var function (x, y = NULL, na.rm = FALSE, use) { if (missing(use)) use <- if (na.rm) "na.or.complete" else "everything" na.method <- pmatch(use, c("all.obs", "complete.obs", "pairwise.complete.obs", "everything", "na.or.complete")) if (is.na(na.method)) stop("invalid 'use' argument") if (is.data.frame(x)) x <- as.matrix(x) else stopifnot(is.atomic(x)) if (is.data.frame(y)) y <- as.matrix(y) else stopifnot(is.atomic(y)) .Call(C_cov, x, y, na.method, FALSE) } 62
> usage(lm) lm(formula, data, subset, weights, na.action, method = "qr", model = TRUE, x = FALSE, y = FALSE, qr = TRUE, singular.ok = TRUE, contrasts = NULL, offset, ...) > usage(lm,width=30) # usage 的width 参数,控制函数的显示宽度 lm(formula, data, subset, weights, na.action, method = "qr", model = TRUE, x = FALSE, y = FALSE, qr = TRUE, singular.ok = TRUE, contrasts = NULL, offset, ...)
6.GUI工具 tidy.gui()函数是一个GUI的工具,可以在界面上编辑并格式化 R代码。首先安装gWidgetsRGtk2库:
> install.packages("gWidgetsRGtk2") 63 also installing the dependencies 'RGtk2', 'gWidgets' 打开GUI控制台:
> library("gWidgetsRGtk2") > g = tidy.gui() 我们输入一段不太好看的代码,如图1-4所示。
图1-4 tidy的GUI 点击“转换”,结果如图1-5所示,可以看到,在GUI的编辑器 中,R语言的代码被格式化了!
7.格式化目录中的文件 tidy.dir()函数可以批量格式化文件,对目录中的所有文件进行 格式化操作。下面新建目录:dir,并在目录dir中新建两个R脚本文 件:dir.r,dir2.r。
~ mkdir dir # 新建目录 dir ~ cd dir ~ vi dir.r # 用vi 新建文件dir.r a<-1+1;a;matrix(rnorm(10),5); ~ vi dir2.r if(a>2) { b=c('11',832);"#a>2";} else print('a is invalid!!') 65 执行tidy.dir:
> tidy.dir(path="dir") tidying dir/dir.r tidying dir/dir2.r 分别查看dir.r和dir2.r:
~ vi dir.r a <- 1 + 1 a matrix(rnorm(10), 5) ~ vi dir2.r if (a > 2) { b = c("11", 832) "#a>2" } else print("a is invalid!!") 我们发现不规则的代码,已经被格式化了!
RStudio Server 问题 R语言开发,哪个工具最好用? 引言 RStudio是R语言开发中的利器,是最好用的R语言IDE集成环 境。RStudio Server更是利器中的神器。不仅提供了Web的功能,可 以安装到远程服务器上,通过Web进行访问,还支持多用户的协 作开发。如此神器,快来动手试一下吧。
RStudio和RStudio Server RStudio是一个强大的、免费的、开源的R语言集成开发环境 的应用软件,可以安装在Windows、Linux和Mac不同操作系统 上。RStudio Server是一个基于Web访问的RStudio云端开发环境, 需要安装在Linux服务器上面,支持多用户远程访问使用。
1.6 R和JSON的傻瓜式编程
rjson包介绍 rjson是一个R语言与JSON进行转换的包,非常简单,支持R自 身语言转型和基于C类库的转型两种方式。rjson包提供的函数只有 3个,fromJSON(),newJSONParser(),toJSON()。后面我们将介绍如 何使用rjson包。
R语言的高质量图形渲染库Cairo
Cairo可以创建高质量的矢量图形 (GIF、SVG、PDF、PostScript)和位图(PNG、JPEG、 106 TIFF),同时支持在后台程序中高质量渲染!本节将介绍Cairo在 R语言中的使用。
Cairo是一个用于图形绘图和渲染的免费库,支持复杂的2D的 绘图功能,支持硬件加速。虽然,Cairo是用C语言编写的,但提 供多种语言的接口,允许其他语言直接调用,包括有C++、C#、 Java、Python、Perl、Ruby、Scheme、Smalltalk等语言。Cairo发布 的许可协议为GNU Lesser General Public License version 2.1(LGPL)或Mozilla Public License 1.1(MPL)。R语言Cairo接 口的官方发布页是http://www.rforge.net/Cairo/。
caTools:一个奇特的工具集
R语言生来就是自由的,不像Java和PHP等有统一的规范约 束。R语言不仅命名、语法各包各异,就连功能也是各种混搭。
caTools库就是这种混搭库,包括了不相关的几组函数工具集,有 图片处理的,有编解码的,有分类器的,有向量计算的,有科学 计算的,而且都很好用!以至于我都不知道如何用简短的语言去 描述这个包了!唯有用“奇特”来概括它的特点。
caTools是一个基础的工具包,包括移动窗口(Moving Window)统计,二进制图片读写,快速计算曲线的面积AUC, LogitBoost分类器,base64的编码器/解码器,快速计算舍入、误 差、求和、累计求和等函数。下面分别介绍caTools包中的API。
第2章 时间序列基础包
2.1 R语言时间序列基础库zoo
2.2 可扩展的时间序列xts
2.3 时间序列可视化plot.xts
3.1 R语言本地缓存工具memoise
R语言性能监控工具Rprof
3.3 R语言性能可视化工具lineprof
4.4 Node.js与R跨平台通信
HTML5作为Web前端大量使用JavaScript,各种炫效果层出不 307 穷。如果能把R语言的效果图,都用HTML5重新做渲染,并增加 时时通信和用户交互,两种语言各取优势,必然产生惊为天人的 效果。长话短说,下面就来介绍Node.js与R跨平台通信
5.1 R语言服务器程序Rserve详解
5.2 Rserve的R语言客户端RSclient
5.3 FastRWeb:跑在Web上的R程序
一直以来R语言都被用在基于个人电脑的客户端程序上。我们 习惯性地下载R安装包,在自己的电脑上面装好,写算法,运行。
然后,以贴图或者文档的形式,发表自己的作品。R如果可以运行 在Server端,把结果以Web的方式发布,这才是互联网的工作方 式!FastRWeb提供一种方式,可以实现B/S结构的R应用。
FastRWeb是一个基础架构环境,可以让R脚本运行在任何 WebServer上,用于展示数据和图形。用户通过URL地址与R脚本 进行通信交互。FastRWeb可以快速地构建一个R的Web环境, FastRWeb底层依赖于CGI程序,也就是说,只要能支持CGI程序的 WebServer,就可以运行FastRWeb。下面以R语言的WebServer库 Rserve为例,部署FastRWeb,实现R的Web应用。
FastRWeb的架构如图5-1所示,从图中我们可以看出其架构原 理:
1)浏览器通过HTPP请求访问Web服务器;2)Web服务器通 过socket把请求发给Rserve服务器;3)Rserve调用FastRWeb环境, 运行R的脚本,返回数据和图片;4)浏览器得到结果,并在Web 上展示。
6.1 RMySQL数据库编程指南
Table of Contents 序一 序二 前言 第一部分 R基础 第1章 R语言基础包 1.1 R是最值得学习的编程语言 1.2 R的历史版本安装 1.3 fortunes记录R语言的大智慧 1.4 formatR代码自动化排版 1.5 多人在线协作R开发RStudio Server 1.6 R和JSON的傻瓜式编程 1.7 R语言的高质量图形渲染库Cairo 1.8 caTools:一个奇特的工具集 第2章 时间序列基础包 2.1 R语言时间序列基础库zoo 2.2 可扩展的时间序列xts 2.3 时间序列可视化plot.xts 第3章 R性能监控包 3.1 R语言本地缓存工具memoise 3.2 R语言性能监控工具Rprof 3.3 R语言性能可视化工具lineprof 第二部分 R服务器 第4章 R语言的跨平台通信 4.1 Rserve与Java的跨平台通信 4.2 Rsession让Java调用R更简单 4.3 解惑rJava R与Java的高速通道 4.4 Node.js与R跨平台通信 第5章 R的服务器实现 5.1 R语言服务器程序Rserve详解 5.2 Rserve的R语言客户端RSclient 5.3 FastRWeb:跑在Web上的R程序 5.4 R语言构建Websocket服务器 第三部分 数据库和大数据 第6章 数据库和NoSQL 6.1 RMySQL数据库编程指南 6.2 R利剑NoSQL 之MongoDB 6.3 R利剑NoSQL之Redis 6.4 R利剑NoSQL之Cassandra 6.5 R利剑NoSQL之Hive 6.6 用RHive从历史数据中提取逆回购信息 第7章 RHadoop 7.1 R语言为Hadoop注入统计血脉 7.2 RHadoop安装与使用 7.3 RHadoop实验:统计邮箱出现次数 7.4 RHadoop实现基于MapReduce的协同过滤算法 7.5 rHBase安装与使用 7.6 第四部分 附录 附录A Java环境安装 附录B MySQL数据库安装